using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Xna.Framework;
using ProjectNoClue.Graphics;

namespace ProjectNoClue
{
    public abstract class Screen
    {
        protected ScreenManager sm;
        /// <summary>If a screen is active, it's update method is called every frame.</summary>
        public bool IsActive = true;
        /// <summary>If a screen is dominant, the screens below it are not updated. For instance, pause.</summary>
        public bool IsDominant = false;
        /// <summary>Popup signifies that screens "below" it are still visible. Hence, new screen is a popup.</summary>
        public bool IsPopUp = true;

        public Screen(ScreenManager sm) { this.sm = sm; }
        /// <summary>
        /// Be familiar with how handleinput works before writing code in this area...
        /// </summary>
        /// <param name="gameTime"></param>
        public abstract void Update(GameTime gameTime);
        /// <summary>
        /// A secondary update that gets called only on the top most screen. It is important to use update and handleinput properly.
        /// For instance, if you pull up your map, the game shoudl still be "active" meaning enemies move and stuff. The only thing that
        /// should not happen is that gameplay screen should no longer receive input. For this reason we have handleinput.
        /// Basically, remember that non-input logic goes in update, input logic goes in handleinput.
        /// </summary>
        /// <param name="gameTime"></param>
        public abstract void HandleInput(GameTime gameTime);
        public abstract void Draw(GameTime gameTime);
        public abstract void UnloadContent();
    }
}
